/**
 * 模拟静态数组
 */
const arr = Array(5).fill(0);
const nums = [1, 2, 5, 4, 0];

/**
 * 插入元素
 * 将 num 插入到索引 index 的位置,index 后面的元素往后移动
 */
function insert(nums, num, index) {
  /**
   *  注释的这块是实现不了插入的
   *  假设 index = 2
   *  第一次循环 i = 2, nums[3] = nums[2] 数组变成 [1, 2, 5, 5, 0]
   *  第二次循环 i = 3, nums[4] = nums[3] 数组变成 [1, 2, 5, 5, 5]
   *  这个是从头开始替换,是不行,所以要从后面开始替换
   */
  //   for (let i = index; i < nums.length - 1; i++) {
  //     nums[i + 1] = nums[i];
  //   }

  /**
   *  假设 index = 2
   *  第一次循环 i = 4, nums[4] = nums[3] 数组变成 [1, 2, 5, 4, 4]
   *  第二次循环 i = 3, nums[3] = nums[2] 数组变成 [1, 2, 5, 5, 4]
   *  替换成功,必须要从后面开始,因为你从前面开始的话,后续再次替换就相当于在重复赋一个值
   */
  for (let i = nums.length - 1; i > index; i--) {
    nums[i] = nums[i - 1];
  }
  nums[index] = num;
}
insert(nums, 3, 2); // [ 1, 2, 3, 5, 4 ]
insert(nums, 6, 3); // [ 1, 2, 3, 6, 5 ]

/**
 * 删除元素
 */
function del(nums, index) {
  for (let i = index; i < nums.length - 1; i++) {
    nums[i] = nums[i + 1];
  }
  nums.length--;
}
del(nums, 4);

/**
 * 数组的扩容
 */
function expand(nums, size) {
  return nums.concat(Array(size).fill(0));
}

console.log('数组扩容5个单元:', expand(nums, 5));
